//
//  @ Project : Galaxy Star Trading System
//  @ File Name : QueryRate.h
//  @ Date : 2014/9/5
//  @ Author :
//
//


#if !defined(_QUERYRATE_H_H)
#define _QUERYRATE_H_H

#include <set>

namespace GSTrader
{
	namespace TradeBase
	{
#define MAXINSTRUMENTLEN 40

		class TRADE_BASE_API CQueryMarginRateItem
		{
		public:
			CQueryMarginRateItem();
			CQueryMarginRateItem(string strInstrumentId, int nHedgeflag = hfSpeculation);
			virtual ~CQueryMarginRateItem();

			friend bool operator == (const CQueryMarginRateItem& l, const CQueryMarginRateItem& r);
			friend bool operator < (const CQueryMarginRateItem& l, const CQueryMarginRateItem& r);
		public:
			char m_szInstrumentId[MAXINSTRUMENTLEN];
			int  m_nHedgeflag;
		};

		class TRADE_BASE_API CQueryCommissionRateItem
		{
		public:
			CQueryCommissionRateItem();
			CQueryCommissionRateItem(string strInstrumentId);
			virtual ~CQueryCommissionRateItem();

			friend bool operator == (const CQueryCommissionRateItem& l, const CQueryCommissionRateItem& r);
			friend bool operator < (const CQueryCommissionRateItem& l, const CQueryCommissionRateItem& r);
		public:
			char m_szInstrumentId[MAXINSTRUMENTLEN];
		};

		class CDataApi;
		class TRADE_BASE_API CQueryMarginRate
		{
		public:
			CQueryMarginRate(CDataApi* pDataApi);
			virtual ~CQueryMarginRate();

			bool QueryNext();
			void Clear();
			bool AddItem(CQueryMarginRateItem& item);
			bool AddFrontItem(CQueryMarginRateItem& item);
			void DelItem(CQueryMarginRateItem& item);
		public:
			set<CQueryMarginRateItem> m_setItem;
			set<CQueryMarginRateItem> m_setTempItem;
			CDataApi* m_pDataApi;
		private:
			mutex m_Mutex;
		};

		class TRADE_BASE_API CQueryCommissionRate
		{
		public:
			CQueryCommissionRate(CDataApi* pDataApi);
			virtual ~CQueryCommissionRate();

			bool QueryNext();
			void Clear();
			bool AddItem(CQueryCommissionRateItem& NewItem);
			bool AddFrontItem(CQueryCommissionRateItem& item);
			void DelItem(CQueryCommissionRateItem& Item);
		public:
			CDataApi* m_pDataApi;
			set<CQueryCommissionRateItem> m_setItem;
			set<CQueryCommissionRateItem> m_setTempItem;
		private:
			mutex m_Mutex;
		};
	}
}


#endif //_QUERYRATE_H_H